
package com.hlkj.pay.app.merchant;
/*
 * Hlpay-Plus aggregate payment system.
 * Copyright (c) 2024-2025 Hlpay Team Copyright has the right of final interpretation.
 */

import java.util.List;

import javax.validation.Valid;

import com.hlkj.framework.common.pojo.CommonResult;
import com.hlkj.framework.common.pojo.PageResult;
import com.hlkj.pay.dto.fund.FundConfigQueryDto;
import com.hlkj.pay.infrastructure.model.merchant.fund.MerchantFundAccountConfigDO;
import com.hlkj.pay.vo.openapi.fund.req.*;
import com.hlkj.pay.vo.openapi.fund.resp.OpenApiFundAccountResp;

/**
 * @author HlpayTeam
 * @date 2025/01/08 16:36
 */
public interface IAcctAccountAppService {

    /**
     * 
     * @param fundAccountReq
     * @return
     */
    CommonResult<OpenApiFundAccountResp> submitAccount(@Valid OpenApiFundAccountSubmitReq fundAccountReq);

    /**
     *
     * @param fundAccountReq
     * @return
     */
    CommonResult<OpenApiFundAccountResp> updateAccountCard(OpenApiFundAccountUpdateReq fundAccountReq);

    /**
     * 
     * @param fundAccountBindReq
     * @return
     */
    CommonResult<Void> accountBind(OpenApiFundAccountBindReq fundAccountBindReq);

    PageResult<MerchantFundAccountConfigDO> accountConfigPage(FundConfigQueryDto fundQueryDto);

    MerchantFundAccountConfigDO accountConfigSelectOne(FundConfigQueryDto fundQueryDto);

    List<MerchantFundAccountConfigDO> accountConfigList(FundConfigQueryDto fundQueryDto);

    CommonResult<Void> accountConfigAdd(OpenApiFundAccountConfigReq fundAccountConfigReq);

    CommonResult<Void> accountConfigUpdate(OpenApiFundAccountConfigReq fundAccountConfigReq);

    CommonResult<MerchantFundAccountConfigDO> accountConfigDetail(Long id);

    CommonResult<Void> accountConfigDelete(Long id);

    /**
     * 
     * @param accountBindReq
     * @return
     */
    CommonResult<Void> accountUnBind(OpenApiFundAccountBindReq accountBindReq);

    /**
     * 
     * @param id
     * @return
     */
    CommonResult<OpenApiFundAccountSubmitReq> queryAccountById(Long id);

    /**
     *
     * @param mchChannelCode
     */
    void queryAccountBindList(String mchChannelCode);

    /**
     *
     * @param fundAccountReq
     * @return
     */
    CommonResult<Void> updateStatus(OpenApiFundAccountBindStatusReq fundAccountReq);

    /**
     *
     * @param fundAccountReq
     * @return
     */
    CommonResult<Void> updateBindType(OpenApiFundAccountBindTypeReq fundAccountReq);
}
